
#ifndef  FLAPP_SYSTEM_H
#define  FLAPP_SYSTEM_H

#include "at32f421.h"
#include "fldrv_board.h"
#include "fldrv_common.h"

//#define APP_FIREWARE_PRO_EN 					//正式版使能
#define APP_PRINTF_EN 								//关键信息打印
#define APP_USE_SPI_FLASH_EN					//FLASH使用，不用就注释
#define APP_USE_COM_PRINTF_EN 				//调试信息开关，正式版需要关闭
#define APP_OTA_USE_INTERNAL_FLASH 
//////////////////////////////////////////////////////////////////////////////////////////////
//boot: 2k
//param: 1k
//bin :
//bat bin:
#define APP_START_ADDR				0x08002000  
#define IAP_UPGRADE_FLAG_ADDR		(APP_START_ADDR-2048)
#define IAP_UPGRADE_FLAG_ADDR_BAT		(APP_START_ADDR-1024)

// 用户的APP code 收到上位机 0x5AA5 命令后, 会设置此旗标, 表示后续将进行APP更新, 详见应用指南  
#define IAP_UPGRADE_FLAG 			0x44475955 

#define OTA_USE_INTERNAL_FLASH 0

#if OTA_USE_INTERNAL_FLASH
//Tatol flash size 10000 = 64K
#define APP_BAT_START_ADDR (0x08010000 - (32*1024))
#define EATINFOR_BAT_ADDR (0x400000 - (36*1024))
#else
#define APP_BAT_START_ADDR (0x400000 - (64*1024))
#define EATINFOR_BAT_ADDR (0x400000 - (72*1024))
#endif

//系统版本定义
#ifdef APP_FIREWARE_PRO_EN								//正式服务器
#define DEVICE_TYPE	 						2					//产品类型消杀类型
#define NET_COMMUNICATION_WAY 	4					//通信方式4G
#define FIREWARE_VERSION_HIHG		0					//固件版本大版本
#define FIREWARE_VERSION_LOW		0					//固件版本小版本
#else																			//测试服务器
#define DEVICE_TYPE	 						2					//产品类型消杀类型
#define NET_COMMUNICATION_WAY 	4					//通信方式4G
#define FIREWARE_VERSION_HIHG		0					//固件版本大版本
#define FIREWARE_VERSION_LOW		0					//固件版本小版本
#endif

#define __NOR_PRINTF__ 1

#define SYS_VERSION 	0
#define SYS_SUB_VERSION 7
#define SYS_TICK 1 //1ms
#define TIMER_MS_NUM		SYS_TICK 	// 1ms 

#define FIREWARE_VERSION_1 	4
#define FIREWARE_VERSION_2 	1


//如果是批产的，必须为1
#define __USE_SPI_FLASH__	1

//#define __USE_BMP_FORMAT__	1//用bmp 格式则为1

#define __COM_PRINTF__ 1//如果是批产的，必须注释

#ifdef __COM_PRINTF__
#define COM_PRINTF printf
#define __NON_DEBUG_FLAG__ 	1
#else
#define COM_PRINTF
#define __NON_DEBUG_FLAG__ 	1
#endif

#define SYS_4MS_TASK_DELAY			(4/TIMER_MS_NUM)	//
#define SYS_100MS_TASK_DELAY			(100/TIMER_MS_NUM)	//
#define SYS_50MS_TASK_DELAY			(50/TIMER_MS_NUM)	//
#define SYS_500MS_TASK_DELAY			(200/TIMER_MS_NUM)	//

#define GUI_UPDATE_TASK_DELAY (110/SYS_TICK)  //100ms

#define SYS_500MS_DELAY			SYS_500MS_TASK_DELAY	//
#define SYS_1S_DELAY				(1000/SYS_500MS_TASK_DELAY/TIMER_MS_NUM)// unit: SYS_500MS_DELAY

#define SYS_1MIN_DELAY			(60*SYS_1S_DELAY)// unit: SYS_500MS_DELAY

#define WASH_0S_DELAY			(0*SYS_1S_DELAY)// unit: SYS_500MS_DELAY
#define WASH_1S_DELAY			(1*SYS_1S_DELAY)// unit: SYS_500MS_DELAY

#define GETBIT_VAL(var,bit) 		(var&(1<<bit))
#define SETBIT_VAL(var,bit) 		(var|=(1<<bit))
#define CLRBIT_VAL(var,bit) 		(var&=(~(0x01<<(bit))))

void flapp_task_4ms(void);
void flapp_task_100ms(void);
void flapp_task_50ms(void);
void flapp_task_500ms(void);
#endif

